package cn.itsource.stream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 *	IO流：
 *		分类：
 *					输入流			 		输出流
			字节流	InputStream（抽象类）     	OutputStream（抽象类）
			字符流	Reader （抽象类）       	 	Writer（抽象类）
			
	字节流：
 *		使用场景：
 *		1.字节流处理除了文本、文字相关所有的流问题，如，png/jpg/avi/map4/mp3/exe
 *		2.字符流只处理文本、文字相关
 *
 *		1.输入流	abstract class InputStream:这个抽象类是表示输入字节流的所有类的超类。		将硬盘的数据读取到内存
 *								|子类
 *							FileInputStream 
 *								1. 构造方法
 *										FileInputStream(String name) 	name：表示(绝对路径、相对路径)文件名
 *										FileInputStream(File file) 
 *
 *								2. 普通方法：
									//1. int read(byte[] b) 从输入流读取一些字节数，并将它们存储到缓冲区 b 。  最常用
 *									//2. int read() 从输入流读取数据的下一个字节。  
									//3. int read(byte[] b, int off, int len) 	从输入流读取最多 len字节的数据到一个字节数组。	
									
									
 *		2.输出流	abstract class OutputStream:这个抽象类是表示输出字节流的所有类的超类。		将内存的数据写出到硬盘
 *								|子类
 *							FileOutputStream 
 *								1. 构造方法
										FileOutputStream(String name) name：表示(绝对路径、相对路径)文件名
										FileOutputStream(String name, boolean append) 
										append：表示是否在该文件末尾追加数据，如果为true，表示追加，false，表示文件从头开始覆盖
 *										FileOutputStream(File file) 
										FileOutputStream(File file, boolean append) 
 *								
 *								2. 普通方法：
 *									//1. void write(byte[] b)将 b.length个字节从指定的字节数组写入此文件输出流。  
									//2. void write(byte[] b, int off, int len) 	将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。  最常用
									//3. void write(int b) 将指定的字节写入此文件输出流。  
		3. 注意事项：
				1. 必须要关闭IO流，节约资源开销
				2. 关闭IO流原则，先开后关
 */
public class OutputStreamTest{

	public static void main(String[] args) {
		/*
		 * FileOutputStream 
			1. 构造方法
					FileOutputStream(String name) name：表示(绝对路径、相对路径)文件名，默认是false
					FileOutputStream(String name, boolean append) 
						append：表示是否在该文件末尾追加数据，如果为true，表示追加，false，表示从文件头开始覆盖
					FileOutputStream(File file) 
					FileOutputStream(File file, boolean append)
					
				必须要关闭IO流，节约资源开销
		 */
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream("outputsteam.txt");
			
			//调用方法写出数据
			//将字符串转换为字节数组	=>编码	getBytes();
//			byte[] b = "ABCDEFG123约吧".getBytes();
//			//1. void write(byte[] b)将 b.length个字节从指定的字节数组写入此文件输出流。  
//			fos.write(b);
			
			//掌握这一个即可
			//2. void write(byte[] b, int off, int len) 	将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。  最常用
			byte[] b = "ABCDEFG123约吧".getBytes();
			fos.write(b, 0, b.length);//该方法通常配合读取的流使用，做文件复制工作
			
			//3. void write(int b) 将指定的字节写入此文件输出流。
//			fos.write(97);//a
			
			System.out.println("写出成功！");
		} catch (FileNotFoundException e) {
			System.out.println("文件未找到！");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("写出失败！");
			e.printStackTrace();
		} finally {
			//先判断是否为null
			if (fos != null) {
				try {
					//1. 必须要关闭IO流，节约资源开销		2. 关闭IO流原则，先开后关
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}

}
